//给定一个字符串
// s ，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。 
//
// 
//
// 示例 1： 
//
// 
//输入：s = "Let's take LeetCode contest"
//输出："s'teL ekat edoCteeL tsetnoc"
// 
//
// 示例 2: 
//
// 
//输入： s = "Mr Ding"
//输出："rM gniD"
// 
//
// 
//
// 提示： 
//
// 
// 1 <= s.length <= 5 * 10⁴ 
// 
// s 包含可打印的 ASCII 字符。 
// 
// s 不包含任何开头或结尾空格。 
// 
// s 里 至少 有一个词。 
// 
// s 中的所有单词都用一个空格隔开。 
// 
//
// Related Topics 双指针 字符串 👍 607 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-09-22 13:44:41
 * @description 557.反转字符串中的单词 III
 
 */
 
public class ReverseWordsInAStringIii {
    public static void main(String[] args) {
    //测试代码
    ReverseWordsInAStringIii fun = new ReverseWordsInAStringIii();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
        //reverse stringBuilder
    public String reverseWords1(String s) {
        StringBuilder sb=new StringBuilder();
        String[] words=s.split(" ");
        for(int i=0;i<words.length;i++){
            sb.append(new StringBuilder(words[i]).reverse());
            if(i!=words.length-1){
                sb.append(" ");
            }
        }
        return sb.toString();
    }
    // two pointers
    public String reverseWords(String s) {
        char[] chars=s.toCharArray();
        int n=chars.length;
        int left=0;
        for(int right=0;right<n;right++){
            if(chars[right]==' '){
                reverse(chars,left,right-1);
                left=right+1;
            }
        }
        reverse(chars,left,n-1);
        return new String(chars);
    }
    public void reverse(char[] chars,int left,int right){
        while(left<right){
            char temp=chars[left];
            chars[left]=chars[right];
            chars[right]=temp;
            left++;
            right--;
        }
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
